Zum Hauptinhalt springen

Geplante MQTT-Steuerung

tipp

Die geplante MQTT-Steuerung ist für zeitlich geplante Nachrichten gedacht. Für die Live-Steuerung siehe stattdessen Live MQTT Control.

Dieser Leitfaden hilft Ihnen, MQTT auf Ihrem SmartgridOne Controller zu konfigurieren, um Batterie- und Solarpanel-Installationen aus der Ferne zu steuern und zu überwachen.

Was Sie benötigen

  1. SmartgridOne Controller mit Internetverbindung.
  2. MQTT-Anmeldedaten: Diese können angefordert werden, indem Sie eine E-Mail an support@eniris.be senden.
  3. Python-Entwicklungsumgebung (oder einen anderen MQTT-Client). Dieser Leitfaden verwendet ein einfaches Beispiel, das in Python geschrieben ist, um Ihnen den Einstieg in MQTT und das Senden von Befehlen zu erleichtern. Wir empfehlen, Python wegen der Benutzerfreundlichkeit zu verwenden, aber jeder andere MQTT-Client wird unterstützt.

Zusätzliche Informationen

MQTT ist ein schnelles Kommunikationsprotokoll über das Internet. Es ist ein Publish/Subscribe-Nachrichtensystem, das eine direkte Verbindung zwischen Ihrer Maschine und dem SmartgridOne Controller ermöglicht. Ihre Anlagen sind in Gruppen von Solar, Batterie, EV und HVAC klassifiziert. Momentan ermöglicht diese Integration die Steuerung pro Gruppe, nicht pro Gerät.

Erstkonfiguration (Ausgangspunkt für neue Benutzer)

Ich habe einen SmartgridOne Controller, den ich für die MQTT-Remote-Steuerung einrichten möchte.

1. Überprüfen Sie Ihr Netzwerk

Stellen Sie sicher, dass Ihr Netzwerk den MQTT-Netzwerkverkehr über Port 1883 zulässt. Sie können dies mit dem Befehl tun:

nc -zv mqtt.eniris.be 1883

Wenn dieser Befehl nicht verfügbar ist, können Sie alternativ diesen Python-Code herunterladen und ausführen.

Im Zweifelsfall konsultieren Sie Ihren Netzwerkingenieur oder verwenden Sie vorübergehend den 4G/5G-Hotspot Ihres Handys, wenn Verbindungsfehler auftreten.

hinweis

Wenn Port 1883 von Ihrem Netzwerk aus nicht zugänglich ist, bieten wir eine Backup-Lösung auf Port 80. Dies kann zu einem späteren Schritt in diesem Handbuch in Ihrem MQTT-Client konfiguriert werden.

2. Fügen Sie Ihre Geräte hinzu

Loggen Sie sich in die Inbetriebnahmeoberfläche ein und stellen Sie sicher, dass die Geräte hinzugefügt werden zu dem SmartgridOne Controller.

3. Fügen Sie das MQTT-Externsignal hinzu

Bild 1
Bild 1
Bild 1

4. Aktivieren Sie das MQTT-Remote-Signal

Wählen Sie alle Geräte aus, die Sie in die MQTT-Remote-Steuerung einbeziehen möchten.

Bild 1

5. Remote-Signal wurde hinzugefügt

Die MQTT-Remote-Steuerungsoberfläche wurde nun auf dem SmartgridOne Controller aktiviert.

Wir sind jetzt bereit, einige grundlegende Befehle mit einem einfachen Beispiel zu senden. Die Statusspalte zeigt Ihnen an, ob ein Befehl aktiv ist.

Python-Demo-Skript

Ein guter erster Ausgangspunkt wäre, Ihre neu eingerichtete Integration mit einem einfachen Beispiel zu testen.

Dieser Testcode führt eine einfache Aufgabe aus, indem er kontinuierlich den folgenden Zeitplan sendet:

  • Batterie: Lade mit 5 kW für 15 Minuten in 10 Minuten
  • Solar: Setze die Leistung auf 0 kW für eine Stunde in 30 Minuten

Der SmartgridOne Controller antwortet mit einer Bestätigungsmeldung, die die eindeutige Zeitplan-ID enthält, oder mit einer Fehlermeldung.

Anschließend rufen wir den nächsten Zeitplan für beide Gerätetypen ab, um zu bestätigen, dass der Befehl erfolgreich war.

Bitte laden Sie die Datei unten in Ihrer bevorzugten Python-IDE herunter. Füllen Sie Ihre Seriennummer und MQTT-Anmeldedaten aus und führen Sie das Skript aus:

Wenn dies erfolgreich war, können Sie mit dem Senden anderer Arten von Nachrichten fortfahren. Alle Nachrichten sind unten beschrieben.

MQTT-Dokumentation zum Senden von Befehlen

In diesem Abschnitt werden das MQTT-Nachrichtenformat und die Anforderungen an den Payload beschrieben, um die zeitgesteuerte Steuerung von Geräten innerhalb des Netzwerks des SmartgridOne Controller einzurichten.

MQTT-Themen

  • Abonnieren Thema: standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
  • Feedback Thema: standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>

Dabei sollte <controller SN> mit der tatsächlichen Seriennummer des SmartgridOne Controller ersetzt werden, den Sie steuern möchten.

MQTT-Nachrichtentypen

1. Zeitplan festlegen (set_schedule)

Erstellt einen neuen Zeitplan für einen Gerätetyp.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"replace_overlap": <True/False> (Optional) (default=False),
}
}

Antwort (Erfolg):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <Schedulde IDs gelöscht, wenn replace_overlap=True>
},
"responseCode": 0
}
}

2. Zeitplan abrufen (get_schedule)

Ruft einen bestimmten Zeitplan nach ID ab.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}

Antwort:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

3. Aktiven Zeitplan abrufen (get_active_schedule)

Ruft den derzeit aktiven Zeitplan für einen Gerätetyp ab.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}

Antwort (Erfolg):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

4. Nächsten Zeitplan abrufen (get_next_schedule)

Ruft den nächsten kommenden Zeitplan für einen Gerätetyp ab.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}

Antwort (Erfolg):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

5. Zeitpläne abrufen (get_schedules)

Ruft alle Zeitpläne für ein bestimmtes Datum ab.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Datum-String im Format dd/mm/yyyy>"
}
}

Antwort (Erfolg):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

6. Zukünftige Zeitpläne abrufen (get_future_schedules)

Ruft alle zukünftigen Zeitpläne ab.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}

Antwort (Erfolg):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

7. Zeitplan entfernen (remove_schedule)

Entfernt einen bestimmten Zeitplan nach ID.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}

Antwort (Erfolg):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Zeitplan <Schedule ID> erfolgreich entfernt",
"responseCode": 0
}
}

8. Standortfeedback abrufen (get_feedback)

Ruft detailliertes Feedback über den Status des Systems ab.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {}
}

Antwort (Erfolg):

Feedback-Payload-Struktur

Standard-Zeitplan-Antwortformat

{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}

Komponententypen und Richtlinien

Für Details zu verfügbaren Komponenten und Richtlinien, die geplant werden können, siehe den Abschnitt MQTT Komponenten und Richtlinien in der Live MQTT Control-Dokumentation.

Gerätespezifische Zeitpläne können unter Verwendung des optionalen node_id-Feldes gesendet werden, das sich auf die Knoten-ID des steuerbaren Geräts bezieht.

Fehlerbehandlung

Alle Nachrichten können eine Fehlermeldung mit responseCode: 1 zurückgeben, wenn ein Fehler auftritt:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}

Wenn ein nicht verwandter Fehler auftritt, lautet der Nachrichtentyp (general_error).

Häufige Fehler sind:

  • Überlappung von Zeitplänen mit bestehenden Zeitplänen
  • Ungültiger Zeitrahmen
  • Gerätetyp nicht gefunden
  • Zeitplan-ID nicht gefunden
  • Ungültige Richtlinie für Gerätetyp

Regeln zur Zeitplanverwaltung

  1. Überlappungsregeln
    • Zeitpläne dürfen sich für denselben Gerätetyp nicht überschneiden
    • Zeitpläne dürfen sich für dasselbe Gerät nicht überschneiden
    • Zeitpläne für dasselbe Gerät und denselben Gerätetyp dürfen sich nicht überschneiden
    • Vorhandene, sich überschneidende Zeitpläne werden gelöscht, wenn die Variable replace_overlap beim Erstellen eines neuen Zeitplans auf True gesetzt ist.
  2. Jeder Zeitplan muss haben:
    • Einen gültigen Gerätetyp
    • Eine Startzeit (Unix-Zeitstempel)
    • Eine Endzeit (Unix-Zeitstempel)
    • Eine Richtlinie (die den verfügbaren Richtlinien des Gerätetyps entspricht)
    • Einen Leistungswert (für Richtlinien, die dies erfordern)
  3. Die Startzeit muss vor der Endzeit liegen
  4. Die Startzeit muss mindestens fünf Minuten in der Zukunft liegen
  5. Zeitpläne können nur gelöscht werden, wenn sie mindestens fünf Minuten in der Zukunft beginnen
  6. Zeitpläne können unabhängig für unterschiedliche Gerätetypen festgelegt werden
  7. Das System wendet automatisch die entsprechende Richtlinie an, wenn ein Zeitplan aktiv wird.